All Packages Class Hierarchy This Package Previous Next Index
Object | +----Format | +----NumberFormat | +----java.text.ChoiceFormat
ChoiceFormat
allows you to attach a format to a range of numbers.
It is generally used in a MessageFormat
for handling plurals.
The choice is specified with an ascending list of doubles, where each item
specifies a half-open interval up to the next item:
If there is no match, then either the first or last index is used, depending on whether the number (X) is too low or too high.X matches j if and only if limit[j] <= X < limit[j+1]
Note:
ChoiceFormat
differs from the other Format
classes in that you create a ChoiceFormat
object with a
constructor (not with a getInstance
style factory
method). The factory methods aren't necessary because ChoiceFormat
doesn't require any complex setup for a given locale. In fact,
ChoiceFormat
doesn't implement any locale specific behavior.
When creating a ChoiceFormat
, you must specify an array of formats
and an array of limits. The length of these arrays must be the same.
For example,
nextDouble
can be used to get the next higher double, to
make the half-open interval.)
Here is a simple example that shows formatting and parsing:
Here is a more complex example, with a pattern format:double[] limits = {1,2,3,4,5,6,7}; String[] monthNames = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"}; ChoiceFormat form = new ChoiceFormat(limits, monthNames); ParsePosition status = new ParsePosition(0); for (double i = 0.0; i <= 8.0; ++i) { status.setIndex(0); System.out.println(i + " -> " + form.format(i) + " -> " + form.parse(form.format(i),status)); }
double[] filelimits = {0,1,2}; String[] filepart = {"are no files","is one file","are {2} files"}; ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart); Format[] testFormats = {fileform, null, NumberFormat.getInstance()}; MessageFormat pattform = new MessageFormat("There {0} on {1}"); pattform.setFormats(testFormats); Object[] testArgs = {null, "ADisk", null}; for (int i = 0; i < 4; ++i) { testArgs[0] = new Integer(i); testArgs[2] = testArgs[0]; System.out.println(pattform.format(testArgs)); }
public ChoiceFormat(String newPattern)
public ChoiceFormat(double limits, String[] formats)
public void applyPattern(String newPattern)
public java.lang.Object clone()
public boolean equals(Object obj)
public java.lang.StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
format(double, StringBuffer, FieldPosition)
thus the range of longs that are supported is only equal to
the range that can be stored by double. This will never be
a practical limitation.
public java.lang.StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
public java.lang.Object[] getFormats()
public double[] getLimits()
public int hashCode()
public static final double nextDouble(double d)
Used to make half-open intervals.
public static double nextDouble(double d, boolean positive)parse
public java.lang.Number parse(String text, ParsePosition status)
public static final double previousDouble(double d)
public void setChoices(double limits, String[] formats)
public java.lang.String toPattern()
All Packages Class Hierarchy This Package Previous Next Index